@DataJpaTest এবং @MockBean এর মাধ্যমে Testing

Java Technologies - স্প্রিং বুট জেপিএ (Spring Boot JPA) - Testing Spring Boot JPA Applications
247

@DataJpaTest এবং @MockBean এর ভূমিকা

Spring Boot Testing স্প্রিং বুট অ্যাপ্লিকেশনগুলির টেস্টিং সহজ এবং কার্যকরী করতে সহায়তা করে। @DataJpaTest এবং @MockBean দুটি গুরুত্বপূর্ণ অ্যানোটেশন যা স্প্রিং বুট জেপিএ (Spring Boot JPA)-তে টেস্টিং ব্যবহৃত হয়।

  • @DataJpaTest: এটি শুধুমাত্র ডেটাবেস লেয়ারের (JPA) টেস্টিং জন্য ব্যবহৃত হয়। এটি শুধুমাত্র @Entity ক্লাস, JpaRepository এবং ডেটাবেস সম্পর্কিত অপারেশনগুলির টেস্টিং করে এবং স্বয়ংক্রিয়ভাবে একটি ইন-মেমরি ডেটাবেস (যেমন H2) ব্যবহার করে।
  • @MockBean: এটি স্প্রিং বুটের জন্য একটি অ্যানোটেশন যা স্প্রিং কনটেইনারে মক (mock) Bean তৈরি করতে ব্যবহৃত হয়। এটি সাধারণত সার্ভিস বা অন্যান্য বিহেভিয়ার যেগুলির জন্য প্রকৃত ইনস্ট্যান্সের প্রয়োজন হয় না, সেগুলির টেস্ট করার জন্য ব্যবহৃত হয়।

এই দুটি অ্যানোটেশন ব্যবহার করে, আপনি JPA রেপোজিটরির জন্য টেস্ট করতে পারেন এবং মক বিহেভিয়ার দিয়ে সার্ভিসের টেস্টিং করতে পারেন।


@DataJpaTest এর মাধ্যমে JPA Testing

@DataJpaTest অ্যানোটেশন ব্যবহার করে আপনি সহজে ডেটাবেস অপারেশন, যেমন find, save, delete, ইত্যাদি টেস্ট করতে পারেন। এটি JpaRepository ইন্টারফেসের মাধ্যমে ডেটাবেসের রিড ও রাইট অপারেশন পরীক্ষা করতে সাহায্য করে।

উদাহরণ: @DataJpaTest ব্যবহার করে টেস্টিং

ধরা যাক, আমাদের একটি User Entity ক্লাস রয়েছে এবং একটি UserRepository ইন্টারফেস তৈরি করা আছে।

Step 1: User Entity ক্লাস তৈরি করা

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;
    private String email;

    // Constructor, Getters, and Setters
    public User(String name, String email) {
        this.name = name;
        this.email = email;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

Step 2: UserRepository তৈরি করা

import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
    User findByEmail(String email);
}

Step 3: @DataJpaTest এর মাধ্যমে টেস্ট তৈরি করা

এখন আমরা @DataJpaTest অ্যানোটেশন ব্যবহার করে UserRepository টেস্ট করব। এখানে আমরা টেস্টের মাধ্যমে User Entity কে ডেটাবেসে সেভ এবং ফাইন্ড করতে যাচ্ছি।

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;

import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertEquals;

@DataJpaTest
public class UserRepositoryTest {

    @Autowired
    private UserRepository userRepository;

    @Test
    public void testSaveAndFindByEmail() {
        // Create a new User
        User user = new User("John Doe", "john.doe@example.com");

        // Save the user
        userRepository.save(user);

        // Fetch the user from the database
        User foundUser = userRepository.findByEmail("john.doe@example.com");

        // Verify the user details
        assertNotNull(foundUser);
        assertEquals("John Doe", foundUser.getName());
        assertEquals("john.doe@example.com", foundUser.getEmail());
    }
}

এখানে:

  • @DataJpaTest অ্যানোটেশন দিয়ে স্প্রিং কন্টেইনারের মধ্যে কেবল JPA সম্পর্কিত বিহেভিয়ার টেস্ট হবে।
  • userRepository.save(user) ব্যবহার করে ডেটাবেসে User সেভ করা হচ্ছে।
  • userRepository.findByEmail("john.doe@example.com") ব্যবহার করে User খোঁজা হচ্ছে।

@MockBean এর মাধ্যমে Service Testing

@MockBean অ্যানোটেশন ব্যবহার করে আপনি সার্ভিসের মক বিহেভিয়ার তৈরি করতে পারেন। এটি সাধারণত Service Layer টেস্টিংয়ে ব্যবহৃত হয় যখন আপনি Repository বা External API-এর জন্য প্রকৃত ইনস্ট্যান্স ব্যবহার না করতে চান।

উদাহরণ: @MockBean ব্যবহার করে Service Testing

ধরা যাক, আমাদের একটি UserService ক্লাস রয়েছে, যা UserRepository ব্যবহার করে User ম্যানেজ করে। এখানে আমরা @MockBean ব্যবহার করে UserRepository মক করতে যাচ্ছি।

Step 1: UserService ক্লাস তৈরি করা

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public User getUserByEmail(String email) {
        return userRepository.findByEmail(email);
    }
}

Step 2: UserServiceTest ক্লাস তৈরি করা

এখন আমরা @MockBean ব্যবহার করে UserService টেস্ট করব। এখানে আমরা UserRepository মক করব, যাতে ডেটাবেসের ইনপুট না দিয়ে UserService ক্লাসটি টেস্ট করা যায়।

import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.boot.test.context.SpringBootTest;

import static org.junit.jupiter.api.Assertions.assertEquals;

@SpringBootTest
public class UserServiceTest {

    @Autowired
    private UserService userService;

    @MockBean
    private UserRepository userRepository;

    @Test
    public void testGetUserByEmail() {
        // Create a mock user
        User mockUser = new User("John Doe", "john.doe@example.com");

        // Mock the repository method
        Mockito.when(userRepository.findByEmail("john.doe@example.com")).thenReturn(mockUser);

        // Call the service method
        User user = userService.getUserByEmail("john.doe@example.com");

        // Verify the results
        assertEquals("John Doe", user.getName());
        assertEquals("john.doe@example.com", user.getEmail());
    }
}

এখানে:

  • @MockBean ব্যবহার করে UserRepository মক করা হয়েছে, যাতে ডেটাবেসের আসল ইনপুট না দিয়ে আমরা UserService টেস্ট করতে পারি।
  • Mockito.when(userRepository.findByEmail("john.doe@example.com")).thenReturn(mockUser) ব্যবহার করে আমরা UserRepository এর findByEmail মেথড মক করেছি।

Conclusion

স্প্রিং বুট জেপিএ (Spring Boot JPA) ব্যবহার করে আপনি @DataJpaTest এবং @MockBean এর মাধ্যমে কার্যকরভাবে টেস্টিং করতে পারেন:

  1. @DataJpaTest: শুধুমাত্র JPA ডেটাবেস অপারেশন এবং রেপোজিটরি লেয়ারের টেস্টিং এর জন্য ব্যবহৃত হয়।
  2. @MockBean: সার্ভিস লেয়ার টেস্টিংয়ে ব্যবহৃত হয় যেখানে আপনি মক বিহেভিয়ার তৈরি করে ডিপেনডেন্সি ইনজেকশন করতে পারেন, যেমন UserRepository বা অন্যান্য এক্সটার্নাল সার্ভিসের জন্য।

এভাবে, আপনি সহজেই স্প্রিং বুট জেপিএ অ্যাপ্লিকেশনগুলির টেস্টিং করতে পারেন এবং ডেটাবেস বা বাহ্যিক ডিপেনডেন্সি ছাড়া লজিক টেস্ট করতে পারেন।


Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...